package leetcode.editor.cn;

/**
 * @id: 面试题 17.21
 * @title: 直方图的水量
 */
 
//给定一个直方图(也称柱状图)，假设有人从上面源源不断地倒水，最后直方图能存多少水量?直方图的宽度为 1。 
//
// 
//
// 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图，在这种情况下，可以接 6 个单位的水（蓝色部分表示水）。 感谢 Marco
//s 贡献此图。 
//
// 示例: 
//
// 输入: [0,1,0,2,1,0,1,3,2,1,2,1]
//输出: 6 
// Related Topics 栈 数组 双指针 
// 👍 164 👎 0

public class PVolumeOfHistogramLcci {
    public static void main(String[] args) {
        Solution solution = new PVolumeOfHistogramLcci().new Solution();
        // todo
        int[] arr = {0,1,0,2,1,0,1,3,2,1,2,1};
        int s = solution.trap(arr);
        System.out.println(s);
    }
    
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int trap(int[] height) {
        int sindex = 0, eindex = 0;
        int svalue = 0, evalue = 0;
        int s = 0;
        int size = height.length;
        while(sindex < size) {
            if (height[sindex] > svalue) {
                svalue = height[sindex];
                eindex = sindex + 1;
                while(eindex < size) {
                    if (height[eindex] > evalue) {
                        evalue = height[eindex];
                    }
                    if (height[eindex] < evalue) {
                        s += Math.min(svalue, evalue) * (eindex - sindex - 2);
                        // 恢复
                        svalue = height[eindex - 1];
                        evalue = 0;
                        sindex = eindex - 1;
                        eindex = 0;
                        break;
                    }
                    eindex++;
                }
            }
            sindex++;
        }
        return s;
    }
}
//leetcode submit region end(Prohibit modification and deletion)


}